{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "url_primclass= 'https://raw.githubusercontent.com/irenekarijadi/RF-LSTM-CEEMDAN/main/Dataset/data%20of%20PrimClass_Jaden.csv'\n",
    "primclass= pd.read_csv(url_primclass)\n",
    "data_primclass= primclass[(primclass['timestamp'] > '2015-03-01') & (primclass['timestamp'] < '2015-06-01')]\n",
    "dfs_primclass=data_primclass['energy']\n",
    "datas_primclass=pd.DataFrame(dfs_primclass)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## import libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "import warnings\n",
    "\n",
    "if not sys.warnoptions:\n",
    "    warnings.simplefilter('ignore')\n",
    "\n",
    "from PyEMD import CEEMDAN\n",
    "import numpy\n",
    "import math\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn import metrics\n",
    "\n",
    "import time\n",
    "import dataframe_image as dfi\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import all functions from another notebook for building prediction method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import Setting\n",
    "from myfunctions import lr_model,svr_model,ann_model,rf_model,lstm_model,hybrid_ceemdan_rf,hybrid_ceemdan_lstm,proposed_method"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import parameter settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "hours=Setting.n_hours\n",
    "data_partition=Setting.data_partition\n",
    "max_features=Setting.max_features\n",
    "epoch=Setting.epoch\n",
    "batch_size=Setting.batch_size\n",
    "neuron=Setting.neuron\n",
    "lr=Setting.lr\n",
    "optimizer=Setting.optimizer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run the experiments\n",
    "### Run this following cell will train and test the proposed method and other benchmark methods on Primary Classroom Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--- 0.3186936378479004 seconds - Linear Regression- primclass ---\n",
      "--- 0.17351269721984863 seconds - Support Vector Regression- primclass ---\n",
      "--- 0.8292701244354248 seconds - ANN- primclass ---\n",
      "--- 1.2147679328918457 seconds - Random Forest- primclass ---\n",
      "--- 7.8936872482299805 seconds - lstm- primclass ---\n",
      "--- 42.31880259513855 seconds - ceemdan_rf- primclass ---\n",
      "--- 98.64764738082886 seconds - ceemdan_lstm- primclass ---\n",
      "--- 95.2485363483429 seconds - proposed_method- primclass ---\n"
     ]
    }
   ],
   "source": [
    "#Linear Regression\n",
    "\n",
    "start_time = time.time()\n",
    "lr_primclass=lr_model(datas_primclass,hours,data_partition)\n",
    "lr_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - Linear Regression- primclass ---\" % (lr_time_primclass))\n",
    "\n",
    "#Support Vector Regression\n",
    "start_time = time.time()\n",
    "svr_primclass=svr_model(datas_primclass,hours,data_partition)\n",
    "svr_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - Support Vector Regression- primclass ---\" % (svr_time_primclass))\n",
    "\n",
    "\n",
    "#ANN\n",
    "start_time = time.time()\n",
    "ann_primclass=ann_model(datas_primclass,hours,data_partition)\n",
    "ann_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - ANN- primclass ---\" % (ann_time_primclass))\n",
    "\n",
    "#random forest\n",
    "start_time = time.time()\n",
    "rf_primclass=rf_model(datas_primclass,hours,data_partition,max_features)\n",
    "rf_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - Random Forest- primclass ---\" % (rf_time_primclass))\n",
    "\n",
    "#LSTM\n",
    "start_time = time.time()\n",
    "lstm_primclass=lstm_model(datas_primclass,hours,data_partition,max_features,epoch,batch_size,neuron,lr,optimizer)\n",
    "lstm_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - lstm- primclass ---\" % (lstm_time_primclass))\n",
    "\n",
    "\n",
    "#CEEMDAN RF\n",
    "start_time = time.time()\n",
    "ceemdan_rf_primclass=hybrid_ceemdan_rf(dfs_primclass,hours,data_partition,max_features)\n",
    "ceemdan_rf_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - ceemdan_rf- primclass ---\" % (ceemdan_rf_time_primclass))\n",
    "\n",
    "#CEEMDAN LSTM\n",
    "start_time = time.time()\n",
    "ceemdan_lstm_primclass=hybrid_ceemdan_lstm(dfs_primclass,hours,data_partition,max_features,epoch,batch_size,neuron,lr,optimizer)\n",
    "ceemdan_lstm_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - ceemdan_lstm- primclass ---\" % (ceemdan_lstm_time_primclass))\n",
    "\n",
    "\n",
    "#proposed method\n",
    "start_time = time.time()\n",
    "proposed_method_primclass=proposed_method(dfs_primclass,hours,data_partition,max_features,epoch,batch_size,neuron,lr,optimizer)\n",
    "proposed_method_time_primclass=time.time() - start_time\n",
    "print(\"--- %s seconds - proposed_method- primclass ---\" % (proposed_method_time_primclass))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summarize of experimental results with running time\n",
    "### Run this following cell will summarize the result and generate output used in Section 4.4 (Table 3) for Primary Classroom dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LR</th>\n",
       "      <th>SVR</th>\n",
       "      <th>ANN</th>\n",
       "      <th>RF</th>\n",
       "      <th>LSTM</th>\n",
       "      <th>CEEMDAN RF</th>\n",
       "      <th>CEEMDAN LSTM</th>\n",
       "      <th>Proposed Method</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Primary Classroom results</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MAPE(%)</th>\n",
       "      <td>15.508401</td>\n",
       "      <td>14.671384</td>\n",
       "      <td>14.463561</td>\n",
       "      <td>18.396333</td>\n",
       "      <td>16.652353</td>\n",
       "      <td>10.943504</td>\n",
       "      <td>8.550394</td>\n",
       "      <td>7.164047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RMSE</th>\n",
       "      <td>1.040299</td>\n",
       "      <td>1.150466</td>\n",
       "      <td>0.902013</td>\n",
       "      <td>1.342462</td>\n",
       "      <td>0.957101</td>\n",
       "      <td>0.749697</td>\n",
       "      <td>0.523754</td>\n",
       "      <td>0.466712</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MAE</th>\n",
       "      <td>0.650500</td>\n",
       "      <td>0.646782</td>\n",
       "      <td>0.577659</td>\n",
       "      <td>0.785441</td>\n",
       "      <td>0.622479</td>\n",
       "      <td>0.455436</td>\n",
       "      <td>0.341895</td>\n",
       "      <td>0.298744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>running time (s)</th>\n",
       "      <td>0.318694</td>\n",
       "      <td>0.173513</td>\n",
       "      <td>0.829270</td>\n",
       "      <td>1.214768</td>\n",
       "      <td>7.893687</td>\n",
       "      <td>42.318803</td>\n",
       "      <td>98.647647</td>\n",
       "      <td>95.248536</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                  LR        SVR        ANN         RF  \\\n",
       "Primary Classroom results                                               \n",
       "MAPE(%)                    15.508401  14.671384  14.463561  18.396333   \n",
       "RMSE                        1.040299   1.150466   0.902013   1.342462   \n",
       "MAE                         0.650500   0.646782   0.577659   0.785441   \n",
       "running time (s)            0.318694   0.173513   0.829270   1.214768   \n",
       "\n",
       "                                LSTM  CEEMDAN RF  CEEMDAN LSTM  \\\n",
       "Primary Classroom results                                        \n",
       "MAPE(%)                    16.652353   10.943504      8.550394   \n",
       "RMSE                        0.957101    0.749697      0.523754   \n",
       "MAE                         0.622479    0.455436      0.341895   \n",
       "running time (s)            7.893687   42.318803     98.647647   \n",
       "\n",
       "                           Proposed Method  \n",
       "Primary Classroom results                   \n",
       "MAPE(%)                           7.164047  \n",
       "RMSE                              0.466712  \n",
       "MAE                               0.298744  \n",
       "running time (s)                 95.248536  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "running_time_primclass=pd.DataFrame([lr_time_primclass,svr_time_primclass,ann_time_primclass,\n",
    "                                   rf_time_primclass,lstm_time_primclass,ceemdan_rf_time_primclass,\n",
    "                                   ceemdan_lstm_time_primclass,proposed_method_time_primclass])\n",
    "running_time_primclass=running_time_primclass.T\n",
    "running_time_primclass.columns=['LR','SVR','ANN','RF','LSTM','CEEMDAN RF','CEEMDAN LSTM','Proposed Method']\n",
    "\n",
    "\n",
    "proposed_method_primclass_df=proposed_method_primclass[0:3]\n",
    "result_primclass=pd.DataFrame([lr_primclass,svr_primclass,ann_primclass,rf_primclass,lstm_primclass,ceemdan_rf_primclass,\n",
    "                    ceemdan_lstm_primclass,proposed_method_primclass_df])\n",
    "result_primclass=result_primclass.T\n",
    "result_primclass.columns=['LR','SVR','ANN','RF','LSTM','CEEMDAN RF','CEEMDAN LSTM','Proposed Method']\n",
    "primclass_summary=pd.concat([result_primclass,running_time_primclass],axis=0)\n",
    "\n",
    "primclass_summary.set_axis(['MAPE(%)', 'RMSE','MAE','running time (s)'], axis='index')\n",
    "\n",
    "primclass_summary.style.set_caption(\"primclass Results\")\n",
    "\n",
    "index = primclass_summary.index\n",
    "index.name = \"Primary Classroom results\"\n",
    "primclass_summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export table to png\n",
    "#dfi.export(primclass_summary,\"primclass_summary_table.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculate percentage improvement\n",
    "### Run this following cell will calculate percentage improvement and generate output used in Section 4.4 (Table 4) for Primary Classroom dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Proposed Method vs.LR</th>\n",
       "      <th>Proposed Method vs.SVR</th>\n",
       "      <th>Proposed Method vs.ANN</th>\n",
       "      <th>Proposed Method vs.RF</th>\n",
       "      <th>Proposed Method vs.LSTM</th>\n",
       "      <th>Proposed Method vs.CEEMDAN RF</th>\n",
       "      <th>Proposed Method vs. CEEMDAN LSTM</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Percentage Improvement primclass</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MAPE(%)</th>\n",
       "      <td>53.81</td>\n",
       "      <td>51.17</td>\n",
       "      <td>50.47</td>\n",
       "      <td>61.06</td>\n",
       "      <td>56.98</td>\n",
       "      <td>34.54</td>\n",
       "      <td>16.21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RMSE</th>\n",
       "      <td>55.14</td>\n",
       "      <td>59.43</td>\n",
       "      <td>48.26</td>\n",
       "      <td>65.23</td>\n",
       "      <td>51.24</td>\n",
       "      <td>37.75</td>\n",
       "      <td>10.89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MAE</th>\n",
       "      <td>54.07</td>\n",
       "      <td>53.81</td>\n",
       "      <td>48.28</td>\n",
       "      <td>61.96</td>\n",
       "      <td>52.01</td>\n",
       "      <td>34.40</td>\n",
       "      <td>12.62</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                  Proposed Method vs.LR  \\\n",
       "Percentage Improvement primclass                          \n",
       "MAPE(%)                                           53.81   \n",
       "RMSE                                              55.14   \n",
       "MAE                                               54.07   \n",
       "\n",
       "                                  Proposed Method vs.SVR  \\\n",
       "Percentage Improvement primclass                           \n",
       "MAPE(%)                                            51.17   \n",
       "RMSE                                               59.43   \n",
       "MAE                                                53.81   \n",
       "\n",
       "                                   Proposed Method vs.ANN  \\\n",
       "Percentage Improvement primclass                            \n",
       "MAPE(%)                                             50.47   \n",
       "RMSE                                                48.26   \n",
       "MAE                                                 48.28   \n",
       "\n",
       "                                  Proposed Method vs.RF  \\\n",
       "Percentage Improvement primclass                          \n",
       "MAPE(%)                                           61.06   \n",
       "RMSE                                              65.23   \n",
       "MAE                                               61.96   \n",
       "\n",
       "                                  Proposed Method vs.LSTM  \\\n",
       "Percentage Improvement primclass                            \n",
       "MAPE(%)                                             56.98   \n",
       "RMSE                                                51.24   \n",
       "MAE                                                 52.01   \n",
       "\n",
       "                                  Proposed Method vs.CEEMDAN RF  \\\n",
       "Percentage Improvement primclass                                  \n",
       "MAPE(%)                                                   34.54   \n",
       "RMSE                                                      37.75   \n",
       "MAE                                                       34.40   \n",
       "\n",
       "                                  Proposed Method vs. CEEMDAN LSTM  \n",
       "Percentage Improvement primclass                                    \n",
       "MAPE(%)                                                      16.21  \n",
       "RMSE                                                         10.89  \n",
       "MAE                                                          12.62  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pMAPE_LR_vs_Proposed_primclass=((lr_primclass[0]-proposed_method_primclass[0])/lr_primclass[0])*100\n",
    "pRMSE_LR_vs_Proposed_primclass=((lr_primclass[1]-proposed_method_primclass[1])/lr_primclass[1])*100\n",
    "pMAE_LR_vs_Proposed_primclass=((lr_primclass[2]-proposed_method_primclass[2])/lr_primclass[2])*100\n",
    "\n",
    "pMAPE_SVR_vs_Proposed_primclass=((svr_primclass[0]-proposed_method_primclass[0])/svr_primclass[0])*100\n",
    "pRMSE_SVR_vs_Proposed_primclass=((svr_primclass[1]-proposed_method_primclass[1])/svr_primclass[1])*100\n",
    "pMAE_SVR_vs_Proposed_primclass=((svr_primclass[2]-proposed_method_primclass[2])/svr_primclass[2])*100\n",
    "\n",
    "pMAPE_ANN_vs_Proposed_primclass=((ann_primclass[0]-proposed_method_primclass[0])/ann_primclass[0])*100\n",
    "pRMSE_ANN_vs_Proposed_primclass=((ann_primclass[1]-proposed_method_primclass[1])/ann_primclass[1])*100\n",
    "pMAE_ANN_vs_Proposed_primclass=((ann_primclass[2]-proposed_method_primclass[2])/ann_primclass[2])*100\n",
    "\n",
    "pMAPE_RF_vs_Proposed_primclass=((rf_primclass[0]-proposed_method_primclass[0])/rf_primclass[0])*100\n",
    "pRMSE_RF_vs_Proposed_primclass=((rf_primclass[1]-proposed_method_primclass[1])/rf_primclass[1])*100\n",
    "pMAE_RF_vs_Proposed_primclass=((rf_primclass[2]-proposed_method_primclass[2])/rf_primclass[2])*100\n",
    "\n",
    "pMAPE_LSTM_vs_Proposed_primclass=((lstm_primclass[0]-proposed_method_primclass[0])/lstm_primclass[0])*100\n",
    "pRMSE_LSTM_vs_Proposed_primclass=((lstm_primclass[1]-proposed_method_primclass[1])/lstm_primclass[1])*100\n",
    "pMAE_LSTM_vs_Proposed_primclass=((lstm_primclass[2]-proposed_method_primclass[2])/lstm_primclass[2])*100\n",
    "\n",
    "pMAPE_ceemdan_rf_vs_Proposed_primclass=((ceemdan_rf_primclass[0]-proposed_method_primclass[0])/ceemdan_rf_primclass[0])*100\n",
    "pRMSE_ceemdan_rf_vs_Proposed_primclass=((ceemdan_rf_primclass[1]-proposed_method_primclass[1])/ceemdan_rf_primclass[1])*100\n",
    "pMAE_ceemdan_rf_vs_Proposed_primclass=((ceemdan_rf_primclass[2]-proposed_method_primclass[2])/ceemdan_rf_primclass[2])*100\n",
    "\n",
    "\n",
    "pMAPE_ceemdan_lstm_vs_Proposed_primclass=((ceemdan_lstm_primclass[0]-proposed_method_primclass[0])/ceemdan_lstm_primclass[0])*100\n",
    "pRMSE_ceemdan_lstm_vs_Proposed_primclass=((ceemdan_lstm_primclass[1]-proposed_method_primclass[1])/ceemdan_lstm_primclass[1])*100\n",
    "pMAE_ceemdan_lstm_vs_Proposed_primclass=((ceemdan_lstm_primclass[2]-proposed_method_primclass[2])/ceemdan_lstm_primclass[2])*100\n",
    "\n",
    "\n",
    "df_PI_primclass=[[pMAPE_LR_vs_Proposed_primclass,pMAPE_SVR_vs_Proposed_primclass,pMAPE_ANN_vs_Proposed_primclass,\n",
    "                pMAPE_RF_vs_Proposed_primclass,pMAPE_LSTM_vs_Proposed_primclass,pMAPE_ceemdan_rf_vs_Proposed_primclass,\n",
    "                pMAPE_ceemdan_lstm_vs_Proposed_primclass],\n",
    "                [pRMSE_LR_vs_Proposed_primclass,pRMSE_SVR_vs_Proposed_primclass,pRMSE_ANN_vs_Proposed_primclass,\n",
    "                pRMSE_RF_vs_Proposed_primclass,pRMSE_LSTM_vs_Proposed_primclass,pRMSE_ceemdan_rf_vs_Proposed_primclass,\n",
    "                pRMSE_ceemdan_lstm_vs_Proposed_primclass],\n",
    "                [pMAE_LR_vs_Proposed_primclass,pMAE_SVR_vs_Proposed_primclass,pMAE_ANN_vs_Proposed_primclass,\n",
    "                pMAE_RF_vs_Proposed_primclass,pMAE_LSTM_vs_Proposed_primclass,pMAE_ceemdan_rf_vs_Proposed_primclass,\n",
    "                pMAE_ceemdan_lstm_vs_Proposed_primclass]]\n",
    "\n",
    "PI_primclass=pd.DataFrame(df_PI_primclass, columns=[\"Proposed Method vs.LR\", \"Proposed Method vs.SVR\",\" Proposed Method vs.ANN\",\n",
    "                                      \"Proposed Method vs.RF\",\"Proposed Method vs.LSTM\",\"Proposed Method vs.CEEMDAN RF\",\n",
    "                                      \"Proposed Method vs. CEEMDAN LSTM\"])\n",
    "PI_primclass= PI_primclass.round(decimals = 2)\n",
    "PI_primclass.set_axis(['MAPE(%)', 'RMSE','MAE'], axis='index')\n",
    "PI_primclass.style.set_caption(\"Percentage Improvement-primary classroom Building\")\n",
    "\n",
    "index = PI_primclass.index\n",
    "index.name = \"Percentage Improvement primclass\"\n",
    "PI_primclass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export table to png\n",
    "#dfi.export(PI_primclass,\"PI_primclass_table.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
